/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.jm.financeiro.filter;

import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.Authenticator;  
import javax.mail.Message;  
import javax.mail.MessagingException;  
import javax.mail.PasswordAuthentication;
import javax.mail.Session;  
import javax.mail.Transport;  
import javax.mail.internet.InternetAddress;  
import javax.mail.internet.MimeMessage; 

/**
 *
 * @author joao
 */
//clase que retorna uma autenticacao para ser enviada e verificada pelo servidor smtp
public class SendMail {

    private String mailSMTPServer;
    private String mailSMTPServerPort;
    private final static Logger logger = Logger.getLogger(SendMail.class.getName());
    /*
     * quando instanciar um Objeto ja sera atribuido o servidor SMTP do GMAIL 
     * e a porta usada por ele
     */

    public SendMail() { //Para o GMAIL 
        mailSMTPServer = "smtp.mail.yahoo.com.br";
        mailSMTPServerPort = "465";
    }
    /*
     * caso queira mudar o servidor e a porta, so enviar para o contrutor
     * os valor como string
     */

    public SendMail(String mailSMTPServer, String mailSMTPServerPort) { //Para outro Servidor
        this.mailSMTPServer = mailSMTPServer;
        this.mailSMTPServerPort = mailSMTPServerPort;
    }

    public void sendMail(String from, String to, String subject, String message) throws MessagingException {
        Properties props = new Properties();
        // quem estiver utilizando um SERVIDOR PROXY descomente essa parte e atribua as propriedades do SERVIDOR PROXY utilizado
                /*
         props.setProperty("proxySet","true");
         props.setProperty("socksProxyHost","192.168.155.1"); // IP do Servidor Proxy
         props.setProperty("socksProxyPort","1080");  // Porta do servidor Proxy
         */
        props.put("mail.transport.protocol", "smtp"); //define protocolo de envio como SMTP
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", mailSMTPServer); //server SMTP do GMAIL
        props.put("mail.smtp.auth", "true"); //ativa autenticacao
        props.put("mail.smtp.user", from); //usuario ou seja, a conta que esta enviando o email (tem que ser do GMAIL)
        props.setProperty("mail.smtp.password", "Emailsdos@p237"); // e a senha 
        props.put("mail.smtp.starttls.enable", "true"); //não sei ao certo para que serve, mas tive que colocar...
        props.setProperty("mail.smtp.auth", "true");  //setei a autenticação 
        props.put("mail.debug", "true");
        props.put("mail.smtp.port", mailSMTPServerPort); //porta
        props.put("mail.smtp.socketFactory.port", mailSMTPServerPort); //mesma porta para o socket
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.socketFactory.fallback", "false");

        //p.setProperty("mail.smtp.user", "meu login");   //setei o login  
        //String user = props.getProperty("mail.smtp.user");
        //String password = props.getProperty("mail.smtp.password");
        //Authenticator auth = new SMTPAuthenticator(user, password);

        //Cria um autenticador que sera usado a seguir
        SimpleAuth auth = null;
        auth = new SimpleAuth("triunfosp@yahoo.com.br", "Emailsdos@p237");
        
        //Session - objeto que ira realizar a conexão com o servidor
        //*Como há necessidade de autenticação é criada uma autenticacao que
        // * é responsavel por solicitar e retornar o usuário e senha para 
        // * autenticação */
        Session session = Session.getDefaultInstance(props, auth);
        session.setDebug(true); //Habilita o LOG das ações executadas durante o envio do email
        //Objeto que contém a mensagem
        Message msg = new MimeMessage(session);

        //Setando o destinatário
        msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
        //Setando a origem do email
        msg.setFrom(new InternetAddress(from));
        //Setando o assunto
        msg.setSubject(subject);
        //Setando o conteúdo/corpo do email
        // parteCorpo1.setContent(bodyEmail + "</body></html>", "text/html");  
        msg.setContent("<html><head></head><body>" + message, "text/html");

        //Objeto encarregado de enviar os dados para o email
        Transport tr;
        try {
            tr = session.getTransport("smtp"); //define smtp para transporte
/*
             *  1 - define o servidor smtp
             *  2 - seu nome de usuario do gmail
             *  3 - sua senha do gmail
             */
            //tr.connect(new Socket(getSMTPHost, getSMTPPort));
            tr.connect(mailSMTPServer, 465, "triunfosp@yahoo.com.br", "Emailsdos@p237");
            msg.saveChanges(); // don't forget this
            //envio da mensagem
            tr.sendMessage(msg, msg.getAllRecipients());
            tr.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            System.out.println(e.getMessage());
            e.printStackTrace();
            Logger.getLogger(SendMail.class.getName()).log(Level.SEVERE, null, e);
        }

    }
}

class SimpleAuth extends Authenticator {

    public String username = null;
    public String password = null;

    public SimpleAuth(String user, String pwd) {
        username = user;
        password = pwd;
    }

    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password);
    }
}
